Use type of the correct column (#529535). Add test.
authorJan Arne Petersen <jpetersen@jpetersen.org>
Sat, 24 May 2008 23:32:13 +0000 (23:32 +0000)
committerJan Arne Petersen <jap@src.gnome.org>
Sat, 24 May 2008 23:32:13 +0000 (23:32 +0000)
2008-05-25  Jan Arne Petersen  <jpetersen@jpetersen.org>

* gtk/gtkliststore.c: (list_store_text): Use type of the correct
column (#529535).
* tests/buildertest.c: (test_list_store): Add test.

svn path=/trunk/; revision=20142

ChangeLog
gtk/gtkliststore.c
tests/buildertest.c

index 4f18934eced916199190502ce76bdfc621d03474..8a993cc232af67faacfcbecdab7c10cf7f887a28 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-25  Jan Arne Petersen  <jpetersen@jpetersen.org>
+
+       * gtk/gtkliststore.c: (list_store_text): Use type of the correct
+       column (#529535).
+       * tests/buildertest.c: (test_list_store): Add test.
+
 2008-05-24  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 520989 – icon factory buildable too strict
index 3e56ef4b6ea7650a2463161a235b1ca27fcf0fb5..b1e3ba5ee1c326b8b1e56f72d36506a658be5b32 100644 (file)
@@ -2253,7 +2253,7 @@ list_store_text (GMarkupParseContext *context,
     }
 
   if (!gtk_builder_value_from_string_type (data->builder,
-                                          data->column_types[i],
+                                          data->column_types[info->id],
                                           string,
                                           &data->values[i],
                                           &tmp_error))
@@ -2262,7 +2262,7 @@ list_store_text (GMarkupParseContext *context,
                   tmp_error->domain,
                   tmp_error->code,
                   "Could not convert '%s' to type %s: %s\n",
-                  text, g_type_name (data->column_types[i]),
+                  text, g_type_name (data->column_types[info->id]),
                   tmp_error->message);
       g_error_free (tmp_error);
     }
index 45558eca54ad167d6385484739eebcfc3324f23b..b3214574efb6183d9acf40833ad479da049328a6 100644 (file)
@@ -550,6 +550,31 @@ test_list_store (void)
     "    </data>"
     "  </object>"
     "</interface>";
+  const char buffer3[] = 
+    "<interface>"
+    "  <object class=\"GtkListStore\" id=\"liststore1\">"
+    "    <columns>"
+    "      <column type=\"gchararray\"/>"
+    "      <column type=\"gchararray\"/>"
+    "      <column type=\"gint\"/>"
+    "    </columns>"
+    "    <data>"
+    "      <row>"
+    "        <col id=\"1\" context=\"foo\">Doe</col>"
+    "        <col id=\"0\" translatable=\"yes\">John</col>"
+    "        <col id=\"2\" comment=\"foobar\">25</col>"
+    "      </row>"
+    "      <row>"
+    "        <col id=\"2\">50</col>"
+    "        <col id=\"1\">Dole</col>"
+    "        <col id=\"0\">Johan</col>"
+    "      </row>"
+    "      <row>"
+    "        <col id=\"2\">19</col>"
+    "      </row>"
+    "    </data>"
+    "  </object>"
+    "</interface>";
   GtkBuilder *builder;
   GObject *store;
   GtkTreeIter iter;
@@ -599,6 +624,52 @@ test_list_store (void)
   g_assert (age == 50);
   g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE);
   
+  builder = builder_new_from_string (buffer3, -1, NULL);
+  store = gtk_builder_get_object (builder, "liststore1");
+  g_assert (gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store)) == 3);
+  g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 0) == G_TYPE_STRING);
+  g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 1) == G_TYPE_STRING);
+  g_assert (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), 2) == G_TYPE_INT);
+  
+  g_assert (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter) == TRUE);
+  gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                      0, &surname,
+                      1, &lastname,
+                      2, &age,
+                      -1);
+  g_assert (surname != NULL);
+  g_assert (strcmp (surname, "John") == 0);
+  g_free (surname);
+  g_assert (lastname != NULL);
+  g_assert (strcmp (lastname, "Doe") == 0);
+  g_free (lastname);
+  g_assert (age == 25);
+  g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE);
+  
+  gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                      0, &surname,
+                      1, &lastname,
+                      2, &age,
+                      -1);
+  g_assert (surname != NULL);
+  g_assert (strcmp (surname, "Johan") == 0);
+  g_free (surname);
+  g_assert (lastname != NULL);
+  g_assert (strcmp (lastname, "Dole") == 0);
+  g_free (lastname);
+  g_assert (age == 50);
+  g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == TRUE);
+  
+  gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+                      0, &surname,
+                      1, &lastname,
+                      2, &age,
+                      -1);
+  g_assert (surname == NULL);
+  g_assert (lastname == NULL);
+  g_assert (age == 19);
+  g_assert (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter) == FALSE);
+
   g_object_unref (builder);
 }